import { Vector3, Spherical } from "../three.module.js";

//立方体
export default class Box {
    constructor(r = 0.1) {
        this.r = r;

        this.normals = []; //顶点法向
        this.tangent = []; //定点切线
        this.vertices = []; //顶点信息
        this.elements = []; //默认的Elements
        this.elementsOfLine = []; //默认的线框Elements
        this.uv = []; //默认的线框Elements
        this.count = 0;

        this._init();
    }

    _init() {
        const { r } = this;
        this.count = 8;

        this.vertices = [
            -r, r, -r,
            -r, r, r,
            r, r, r,
            r, r, -r,

            -r, r, r,
            -r, -r, r,
            r, -r, r,
            r, r, r,

            -r, -r, -r,
            -r, -r, r,
            r, -r, r,
            r, -r, -r,

            -r, -r, -r,
            -r, r, -r,
            r, r, -r,
            r, -r, -r,

            -r, r, -r,
            -r, -r, -r,
            -r, -r, r,
            -r, r, r,

            r, r, r,
            r, -r, r,
            r, -r, -r,
            r, r, -r,
        ];

        this.uv = [
            0, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 0, 0, 1, 0, 1, 1,
        ];

        //这个是均和法线
        this.normals = [
            -1, 1, -1,
            -1, 1, 1,
            1, 1, 1,
            1, 1, -1,

            -1, 1, 1,
            -1, -1, 1,
            1, -1, 1,
            1, 1, 1,

            -1, -1, -1,
            -1, -1, 1,
            1, -1, 1,
            1, -1, -1,

            -1, -1, -1,
            -1, 1, -1,
            1, 1, -1,
            1, -1, -1,

            -1, 1, -1,
            -1, -1, -1,
            -1, -1, 1,
            -1, 1, 1,

            1, 1, 1,
            1, -1, 1,
            1, -1, -1,
            1, 1, -1,
        ];

        //这个是硬法线
        // this.normals = [
        //     0, 1, 0,
        //     0, 1, 0,
        //     0, 1, 0,
        //     0, 1, 0,

        //     0, 0, 1,
        //     0, 0, 1,
        //     0, 0, 1,
        //     0, 0, 1,

        //     0, -1, 0,
        //     0, -1, 0,
        //     0, -1, 0,
        //     0, -1, 0,

        //     0, 0, -1,
        //     0, 0, -1,
        //     0, 0, -1,
        //     0, 0, -1,

        //     -1, 0, 0,
        //     -1, 0, 0,
        //     -1, 0, 0,
        //     -1, 0, 0,

        //     1, 0, 0,
        //     1, 0, 0,
        //     1, 0, 0,
        //     1, 0, 0,
        // ];

        //这个是硬切线
        this.tangent = [
            0, 0, -1,
            0, 0, -1,
            0, 0, -1,
            0, 0, -1,

            0, 1, 0,
            0, 1, 0,
            0, 1, 0,
            0, 1, 0,

            0, 0, 1,
            0, 0, 1,
            0, 0, 1,
            0, 0, 1,

            0, -1, 0,
            0, -1, 0,
            0, -1, 0,
            0, -1, 0,

            0, -1, 0,
            0, -1, 0,
            0, -1, 0,
            0, -1, 0,

            0, 1, 0,
            0, 1, 0,
            0, 1, 0,
            0, 1, 0,
        ];

        this.elements = [
            0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12,
            14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23,
        ];
    }

    //获取线框的Elemenets
    getElementsOfLine() {
        return this.elementsOfLine;
    }
}
